home *** CD-ROM | disk | FTP | other *** search
/ Day Cry / Day Cry CD.bin / oh_towns / taropyon / silib / silib.lzh / PRG / SDKFS / FSELMENU.C < prev    next >
C/C++ Source or Header  |  1993-12-03  |  4KB  |  173 lines

  1. /*************************************************************************
  2. *    âüâjâàü[
  3. *************************************************************************/
  4.  
  5. #include    <stdio.h>
  6. #include    <stdlib.h>
  7.  
  8. #include    <silib.h>
  9. #include    <sipd.h>
  10. #include    <kbcode.h>
  11. #include    <sicoltbl.h>
  12. #include    <sifs.h>
  13.  
  14. #include    "sdkfs.h"
  15. #include    "sdkfscf.h"
  16.  
  17. enum
  18. {
  19.     _SORT_OFF,
  20.     _SORT_FILE,
  21.     _SORT_SUB,
  22.     _SORT_DATE,
  23.     _SORT_SIZE,
  24.     _BLK_1,
  25.     _SORT_NORMAL,
  26.     _SORT_REVERSE,
  27.     _BLK_2,
  28.     _DIR_TOP,
  29.     _DIR_BOTTOM,
  30.     _DIR_OFF,
  31.     _NUM,
  32. };
  33.  
  34. static struct
  35. {
  36.     int            md;
  37.     CONST char    *msg;
  38. } menu[] = 
  39. {
  40.     { 0, "Sort off"       },
  41.     { 0, "Sort filename"  },
  42.     { 0, "Sort sub name"  },
  43.     { 0, "Sort date&time" },
  44.     { 0, "Sort file size" },
  45.     { 0, NULL             },
  46.     { 0, "Normal"         },
  47.     { 0, "Reverse"        },
  48.     { 0, NULL             },
  49.     { 0, "Directory top"  },
  50.     { 0, "Directory last" },
  51.     { 0, "Directory off"  },
  52. };
  53.  
  54. int        FileSel_menu( FILESEL_T *fs )
  55. {
  56.     int        i, y;
  57.     int        x1 = fs->frFl.x1 + 1;
  58.     int        y1 = fs->frFl.y1 + 1;
  59.     int        x2 = fs->frFl.x2 - 1;
  60.     int        y2 = fs->frFl.y2 - 1;
  61.     LAYER_T    *ly = SiScn->layerCrt;
  62.     EV_T    *ev = NULL;
  63.     int        evPos = 0;
  64.     POINT_T    posMos = {-1,-1}, posCur = {0,0};
  65.     FRAME_T    frSave = SiPd->fr;
  66.  
  67.     void    term(void)
  68.     {
  69.         PD_setMoveFr( &frSave );
  70.         if ( posMos.x >= 0 && posMos.y >=0 )
  71.         {
  72.             posMos.x += (SiEv->pdX - (x1 + posCur.x));
  73.             posMos.y += (SiEv->pdY - (y1 + posCur.y));
  74.             PD_setPos( &posMos );
  75.         }
  76.         if ( ev )    EV_workFree(ev);
  77.     };
  78.  
  79.     /* â}âEâXê╩Æuò█æ╢    */
  80.     posMos.x = SiEv->pdX;
  81.     posMos.y = SiEv->pdY;
  82.     posCur.x = x2-x1 - 4;
  83.     posCur.y = 3;
  84.     {
  85.         POINT_T    newPos;
  86.  
  87.         newPos.x = x1 + posCur.x;
  88.         newPos.y = y1 + posCur.y;
  89.         PD_setPos( &newPos );
  90.         PD_setMoveFr( &(fs->frFl) );
  91.     }
  92.  
  93.     if ( (ev = EV_workAlloc(NULL,_NUM+4)) == NULL )
  94.     {
  95.         term();
  96.         return (ERR);
  97.     }
  98.  
  99.     menu[_SORT_OFF].md  = ((fs->sort&0x0F) == FSSORT_OFF  ? 0:1);
  100.     menu[_SORT_FILE].md = ((fs->sort&0x0F) == FSSORT_FILE ? 0:1);
  101.     menu[_SORT_SUB].md  = ((fs->sort&0x0F) == FSSORT_SUB  ? 0:1);
  102.     menu[_SORT_DATE].md = ((fs->sort&0x0F) == FSSORT_DATE ? 0:1);
  103.     menu[_SORT_SIZE].md = ((fs->sort&0x0F) == FSSORT_SIZE ? 0:1);
  104.  
  105.     menu[_SORT_NORMAL].md  = ((fs->sort&FSSORT_RVS) == 0 ? 0:1);
  106.     menu[_SORT_REVERSE].md = ((fs->sort&FSSORT_RVS)      ? 0:1);
  107.  
  108.     menu[_DIR_TOP].md    = ((FS_ISSORT_DIRTOP(fs->sort))  ? 0:1);
  109.     menu[_DIR_BOTTOM].md = ((FS_ISSORT_DIRLAST(fs->sort)) ? 0:1);
  110.     menu[_DIR_OFF].md    = ((FS_ISSORT_DIROFF(fs->sort))  ? 0:1);
  111.  
  112.     MOS_DEC();
  113.     SCN_BOXF(x1,y1,x2,y2,PSET,ly->col.lgray);
  114.     y = y1;
  115.     for ( i = 0; i < _NUM; ++i )
  116.     {
  117.         SCN_BOXFCON(x1,y,x2,y+13,1,PSET,ly->col.gray,ly->col.white,ly->col.dark);
  118.         if( menu[i].msg )
  119.         {
  120.             COLOR_T    col;
  121.  
  122.             col = menu[i].md ? ly->col.black : ly->colTbl[8+2];
  123.             SCN_BOXFCON(x1+5-2,y+7-2,x1+5+2,y+7+2,1,PSET,col,ly->col.dark, ly->col.white);
  124.             SCN_PUTS(SiFts->ftsSs2,menu[i].msg,x1+12,y+1,OPAQUE,ly->col.black,ly->col.gray);
  125.             EV_SETBTN1(ev,evPos++, i, NULL, 0,
  126.                 NULL, EVSW_LEFT,x1,y,x2,y+13,1,ly->col.white,ly->col.dark);
  127.             y += 14;
  128.         } else
  129.             y += 3;
  130.     }
  131.     EV_SETSWOLY(ev,evPos++,FSEV_EXIT,NULL,0,NULL,     0,EVSW_RIGHT);
  132.     EV_SETKON1( ev,evPos++,FSEV_EXIT,NULL,0,NULL,'\x1B',KA_CANCEL );
  133.     MOS_INC();
  134.  
  135.     for(;;)
  136.     {
  137.         int        ret;
  138.  
  139.         MOS_CON();
  140.         ret = EV_chk(ev,0);
  141.         if ( ret >= 0 )
  142.         {
  143.             switch ( ret )
  144.             {
  145.                 case _SORT_OFF:        fs->sort = (fs->sort & 0xF0) | FSSORT_OFF;    break;
  146.                 case _SORT_FILE:    fs->sort = (fs->sort & 0xF0) | FSSORT_FILE;    break;
  147.                 case _SORT_SUB:        fs->sort = (fs->sort & 0xF0) | FSSORT_SUB;    break;
  148.                 case _SORT_DATE:    fs->sort = (fs->sort & 0xF0) | FSSORT_DATE;    break;
  149.                 case _SORT_SIZE:    fs->sort = (fs->sort & 0xF0) | FSSORT_SIZE;    break;
  150.  
  151.                 case _SORT_NORMAL:
  152.                 case _SORT_REVERSE:    fs->sort ^= FSSORT_RVS;    break;
  153.  
  154.                 case _DIR_TOP:        fs->sort = (fs->sort & (~FSSORT_DIRBIT)) | FSSORT_DIRTOP;    break;
  155.                 case _DIR_BOTTOM:    fs->sort = (fs->sort & (~FSSORT_DIRBIT)) | FSSORT_DIRLAST;    break;
  156.                 case _DIR_OFF:        fs->sort = (fs->sort & (~FSSORT_DIRBIT)) | FSSORT_DIROFF;    break;
  157.             }
  158.             if ( ret != FSEV_EXIT )
  159.                 FileSel_sort( fs );
  160.             break;
  161.         }
  162.     }
  163.     MOS_DEC();
  164.     SCN_BOXF(x1,y1,x2,y2,PSET,ly->col.black);
  165.     MOS_INC();
  166.  
  167.     term();
  168.     FileSel_dspFndat( fs, -1);
  169.     EV_waitMosSwOff();
  170.  
  171.     return (NORMAL);
  172. }
  173.